import Scanner from "./scanner"
import nestTokens from "./nestTokens";

// 将模板字符串编译成为tokens
export default function templateToTokens(templateStr) {
    var tokens = [];
    // 实例化一个扫描器，构造时提供只需提供一个模板字符串的参数
    // 扫描器只针对模板字符串工作
    var scanner = new Scanner(templateStr);
    while (!scanner.eos()) {
        // 收集开始标记出现之前的字符
        var word = scanner.scanUtil("{{");
        // 存储到数组
        if (word !== "") {
            tokens.push(["text", word]);
        }
        // 跳过双括号
        scanner.scan("{{");
        // 收集结束标记出现之前的字符
        var word1 = scanner.scanUtil("}}");
        if (word1 !== "") {
            // 如果是# / 包含的一维数组怎么办呢？
            // 这里的Word已经是{{}}里面的，所以只需要判断一下word[0]
            if (word1[0] == "#") {
                tokens.push(["#", word1.substring(1)]);
            } else if (word1[0] == "/") {
                tokens.push(["/", word1.substring(1)]);
            } else {
                tokens.push(["name", word1]);
            }
        }
        scanner.scan("}}");
    }
    // return tokens;
    return nestTokens(tokens);
}